package com.key.modules.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.key.modules.dto.SysMenuSelectDTO;
import com.key.modules.dto.SysUserSelectDTO;
import com.key.modules.entity.SysRole;
import com.key.modules.mapper.SysRoleMapper;
import com.key.modules.service.SysRoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author：朕
 * @Package：com.key.modules.service.impl
 * @Project：logistics_system
 * @name：SysRoleServiceImpl
 * @Date：2023/3/23 20:03
 * @Filename：SysRoleServiceImpl
 */
@Service
@Slf4j
public class SysRoleServiceImpl implements SysRoleService {

    @Autowired
    private SysRoleMapper sysRoleMapper;

    /**
     * 显示角色
     * @return
     */
    @Override
    public IPage<SysRole> findSysRole(SysMenuSelectDTO sysMenuSelectDTO) {
        log.info("显示角色-页数："+sysMenuSelectDTO);
        Page<SysRole> page =new Page<>(sysMenuSelectDTO.getCurrent()-1,sysMenuSelectDTO.getSize());
        QueryWrapper<SysRole> wrapper = new QueryWrapper<>();
        IPage<SysRole> iPage = sysRoleMapper.selectPage(page,wrapper);
        log.info("显示成功！"+iPage);
        return iPage;
    }

    /**
     * 增加角色
     * @param sysRole
     * @return
     */
    @Override
    public Boolean addSysRole(SysRole sysRole) {
        log.info("增加角色信息："+sysRole);
        int s1 =0;
        Date date = new Date();
        sysRole.setRoleDate(date);
        sysRole.setRoleUpdateDate(null);
        //判断角色中是否存有该角色
        SysRole s = sysRoleMapper.findRoleByName(sysRole.getRoleName());
        if(s==null){
            s1 = sysRoleMapper.insert(sysRole);
            log.info("增加成功："+s1);
            if(s1>0){
                return true;
            }
        }
        log.info("增加失败："+s1);
        return false;
    }

    /**
     * 修改角色
     * @param sysRole
     * @return
     */
    @Override
    public Boolean updateSysRole(SysRole sysRole) {
        log.info("修改角色："+sysRole);
        Date date = new Date();
        sysRole.setRoleUpdateDate(date);
        int s = sysRoleMapper.updateById(sysRole);
        if(s>0){
            log.info("修改成功："+s);
            return true;
        }
        log.info("修改失败："+s);
        return false;
    }

    /**
     * 删除角色
     * @param userId
     * @return
     */
    @Override
    public Boolean deleteSysRole(Integer userId) {
        log.info("根据角色Id删除角色"+userId);
        int s = sysRoleMapper.deleteById(userId);
        if(s>0){
            log.info("删除成功："+s);
            return true;
        }
        log.info("删除失败："+s);
        return false;
    }

    /**
     * 增加角色权限
     * @param roleId
     * @param menuId
     * @return
     */
    @Override
    public Boolean addSysRoleMenu(Integer roleId,Integer[] menuId) {
        for(int j=0;j<menuId.length;j++){
            log.info("增加角色权限，角色id"+roleId,"增加的权限："+menuId);
        }
        int s = 0;
        Map<String,Object> map = new HashMap();
        sysRoleMapper.deleteMenuIdByRoleId(roleId);
        for(int i = 0;i<menuId.length;i++){
            map.put("roleId",roleId);
            map.put("menuId",menuId[i]);
            s = sysRoleMapper.addMenuIdByRoleId(map);
        }
        if(s>0){
            log.info("权限增加成功："+s);
            return true;
        }
        log.info("权限增加失败："+s);
        return false;
    }
}
